iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0

R-Type 指令

  • add: rd = rs1 + rs2 → 將 rs1 和 rs2 相加,結果存入 rd。
  • sub: rd = rs1 - rs2 → 將 rs1 減去 rs2,結果存入 rd。
  • sll: rd = rs1 << rs2[4:0] → 將 rs1 向左邊位移 rs2 的低 5 位數,結果存入 rd。
  • slt: rd = rs1 <s rs2 → 如果 rs1 小於 rs2(有號數比較),rd 設為 1,否則設為 0。
  • sltu: rd = rs1 <u rs2 → 如果 rs1 小於 rs2(無號數比較),rd 設為 1,否則設為 0。
  • xor: rd = rs1 ^ rs2 → 將 rs1 和 rs2 進行逐位異或,結果存入 rd。
  • srl: rd = rs1 >> rs2[4:0] → 將 rs1 向右邊無號位移 rs2 的低 5 位數,結果存入 rd。
  • sra: rd = rs1 >>s rs2[4:0] → 將 rs1 向右邊有號位移 rs2 的低 5 位數,結果存入 rd。
  • or: rd = rs1 | rs2 → 將 rs1 和 rs2 進行逐位或運算,結果存入 rd。
  • and: rd = rs1 & rs2 → 將 rs1 和 rs2 進行逐位與運算,結果存入 rd。

I-Type 指令

  • addi: rd = rs1 + imm → 將 rs1 加上立即數 imm,結果存入 rd。
  • slti: rd = rs1 <s imm → 如果 rs1 小於立即數 imm(有號數比較),rd 設為 1,否則設為 0。
  • sltiu: rd = rs1 <u imm → 如果 rs1 小於立即數 imm(無號數比較),rd 設為 1,否則設為 0。
  • xori: rd = rs1 ^ imm → 將 rs1 和立即數 imm 進行逐位異或,結果存入 rd。
  • ori: rd = rs1 | imm → 將 rs1 和立即數 imm 進行逐位或運算,結果存入 rd。
  • andi: rd = rs1 & imm → 將 rs1 和立即數 imm 進行逐位與運算,結果存入 rd。

S-Type 指令

  • sb: M[rs1 + imm][0:7] = rs2[0:7] → 將 rs2 的低 8 位數儲存到記憶體位置 M[rs1 + imm] 中。
  • sh: M[rs1 + imm][0:15] = rs2[0:15] → 將 rs2 的低 16 位數儲存到記憶體位置 M[rs1 + imm] 中。
  • sw: M[rs1 + imm][0:31] = rs2[0:31] → 將 rs2 的低 32 位數儲存到記憶體位置 M[rs1 + imm] 中。
  • sd: M[rs1 + imm][0:63] = rs2[0:63] → 將 rs2 的低 64 位數儲存到記憶體位置 M[rs1 + imm] 中。

B-Type 指令

  • bltu: if (rs1 >u rs2) pc += imm → 如果 rs1 小於 rs2(無號數比較),跳轉到 pc + imm 的位置。
  • bge: if (rs1 >=s rs2) pc += imm → 如果 rs1 大於等於 rs2(有號數比較),跳轉到 pc + imm 的位置。
  • bgeu: if (rs1 >=u rs2) pc += imm → 如果 rs1 大於等於 rs2(無號數比較),跳轉到 pc + imm 的位置。

U-Type 指令

  • lui: lui imm rd → 將立即數 imm 儲存到 rd 的高 20 位數中。
  • auipc: auipc imm rd → 將 pc 和立即數 imm 相加,結果存入 rd。

J-Type 指令

  • jal: jal imm rd → 跳轉到 pc + imm 的位置,並將返回地址存入 rd。

上一篇
[Day13] 遞迴與向量加法
下一篇
[Day15] CPU 時間與 Clock Cycles 的計算
系列文
RISC-V 與處理器之架構學習及應用21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言